- Published on
스트레스 테스트를 해보자
처음으로 성능측정을 위한 스트레스 테스트를 진행 해 보겠습니다.
스트레스 테스트 도구
스트레스 테스트 도구는 nGrider, JMeter, Artillery 등 이 있습니다.
nGrider와 JMeter은 JAVA기반으로 오래되고 정교한 테스트를 할 수 있는 도구고
Artillery는 Nodejs기반의 간단하게 테스트 할 수 있는 도구입니다.
Artillery는 다른 도구들보다 나온지 얼마 되지 않아 언제든지 사라질 수 있지만 현제 node.js기반이라 Artillery를 사용해 보기로 결정하였습니다.
홈페이지에서 설명하는 몇 가지 특징을 보면
HTTP(S), Socket.io, Websocket 등 다양한 프로토콜을 지원한다.
시나리오 테스트를 할 수 있다.
JavaScript로 로직을 작성해서 추가할 수 있다.
statsd를 지원해서 Datadog이나 InfluxDB 등에 실시간으로 결과를 등록할 수 있다.
Artillery의 사용법은 추후 포스팅 할 계획이며 Artillery공식문서에서 확인할 수 있습니다.
분석
처음은 1000명의 사용자가 50개의 요청을 하였습니다.
10235번의 요청에 9344번의 성공응답(200)과 71번의 429 에러코드(너무 많은 요청) 823번의 요청 실패를 한 것 을 확인할 수 있습니다.
전체 요청의 90%의 성공률을 보이고 177명의 사용자(18%)만 모든 요청을 성공하였습니다.
사용하지 못할 수준의 상태는 아니지만 1000명 이상의 동접자를 받아들이긴 힘들 것으로 예측됩니다.
몇명 정도의 동접자를 수용가능할지 예상하기 위해
500명의 사용자의 2개의 요청
10명의 사용자가 2개의 요청
100명의 사용자가 2개의 요청
100명의 사용자가 10개의 요청
250명의 사용자가 2개의 요청
확인해보면 100명의 동접자까진 모든 응답에 성공했지만 250명 정도부터 실패하기 시작하는 것을 확인 할 수 있습니다.
응답시간 또한 250명부터 크기 늘어나 성능이 감소된것을 확인할 수 있습니다.
현재 Vercel과 ec2 free tire으로 배포되고 있고 100명의 동접자까지 처리가 가능한 것 을 확인할 수 있습니다.
테스트라는 것을 감안 했을때 최소 50명 정도의 사용자를 수용할 수 있을 것으로 예상됩니다.
예상은 Verel에서 무료로 배포중이라 사양이 좋지않아 많은 트래픽을 견디지 못하거나 Vercel에서 일정이상의 트래픽을 막는 것 같습니다.
추후 어느곳에서 병목현상이 발생하여 문제가 있는지, 어떻게 개선할 것 인지 알아보겠습니다.